2장에서 만든 강아지문으로 부자가 되어버렸습니다~(부럽다 ㅡㅡㅋ)
강아지문을 좋아하던 고객의 추가적인 요구사항이 발생했네요
"피도가 짖을때 강아지 문이 자동으로 열리면 좋겠다"
요구사항이 변할때에도 여러분은 프로그램을 업데이트해서 고객의 기대에 맞춰 동작하게 만들 준비가 되어 있어야 합니다.
여러분의 고객이 새로운 요구사항이 있으면, 그러한 요구사항들에 맞추어 프로그램을 수정하는 것은 여러분의 몫입니다.
요구사항은 항상 변합니다. 하지만 유스케이스들이 잘 만들어져 있으면, 새로운 요구사항에 맞추어 소프트웨어를 빠르게 바꿀수 있습니다.
1. 피도가 밖에 나가고 싶어 짖습니다.
2. 토드 또는 지나가 피도가 짖는 것을 듣습니다.
3. 토드 또는 지나가 리모콘의 버튼을 누릅니다.
4. 강아지 문이 열립니다.
5. 피도가 밖에 나갑니다.
6. 피도는 밖에서 쉬합니다.
6.1 문이 자동으로 닫힙니다.
6.2 피도가 들어 오려고 짖습니다.
6.3 토드나 지나가 피도가 짖는 것을 듣습니다.(다시)
6.4 토드나 지나가 리모콘을 누릅니다.
6.5 강아지 문이 열립니다.(다시)
7. 피도가 안으로 들어옵니다.
8. 강아지 문이 자동으로 닫힙니다.
2.1. 강아지 소리인식기가 강아지 소리를 듣습니다.
3.1. 강아지 소리인식기가 강아지 문이 열리도록 신호를 보냅니다.
6.3.1. 강아지 소리인식기가 강아지소리를 듣습니다(다시)
6.4.1. 강아지 소리인식기가 강아지 문이 열리도록 신호를 보냅니다.
주경로
1. 피도가 밖에 나가고 싶어 짖습니다.
2. 강아지 소리인식기가 강아지 소리를 듣습니다.
3. 강아지 소리인식기가 강아지 문이 열리도록 신호를 보냅니다.
4. 강아지 문이 열립니다.
5. 피도가 밖에 나갑니다.
6. 피도는 밖에서 쉬합니다.
6.1. 문이 자동으로 닫힙니다.
6.2. 피도가 안으로 들여보내달라고 짖습니다.
6.3. 강아지 소리인식기가 강아지소리를 듣습니다(다시)
6.4. 강아지 소리인식기가 강아지 문이 열리도록 신호를 보냅니다.
6.5. 강아지문이 열립니다(다시)
7. 피도가 안으로 들어옵니다.
8. 강아지 문이 자동으로 닫힙니다.
대체경로
2.1. 토드 또는 지나가 피도가 짖는 것을 듣습니다.
3.1. 토드 또는 지나가 리모콘의 버튼을 누릅니다.
6.3.1. 피도가 들어 오려고 짖는 것을 듣습니다(다시)
6.4.1 토드나 지나가 리모콘의 버튼을 누릅니다.
대체 경로는 유스케이스에 있는 단계중에서 선택적이거나, 대체할 방법을 나타내는 단계들입니다.
대체경로는 주경로에 추가되는 추가단계일 수도 있고, 주 경로와는 완전히 다른 경로를 통해 목적을 달성하도로고 하는 단계들을 수도 있습니다.
첫단계부터 마지막 단계까지 유스케이스를 거치는 하나의 전체 경로를 시나리오라고 부릅니다.
대부분의 유스케이스는 몇개의 다른 시나리오가 있지만, 시나리오들은 항상 같은 사용자 목표를 공유합니다.
유스케이스를 바꿀 때마다, 요구사항으로 다시 돌아가서 확인해야 합니다.
DogDoor.java
public class DogDoorSimulator {
public static void main(String[] args) {
DogDoor door = new DogDoor();
BarkRecognizer recognizer = new BarkRecognizer(door);
Remote remote = new Remote(door);
System.out.println("피도가 짖는다 열려라~!");
recognizer.recognize("woof");
//버튼은 하나만 있으면 알아서 다 한다.
remote.pressButton();
System.out.println("피도가 짖는다 닫혀라~!");
try {
Thread.currentThread().sleep(10000);
} catch (InterruptedException e) {
System.out.println("피도가 들어오지 못했다. 멍멍~!");
recognizer.recognize("woof");
}
System.out.println("토드와 지나가 다시 리모콘 클릭..");
}
}
DogDoor.java
public class DogDoor{
public void open(){
System.out.println("강아지문 열림");
open = true;
final Timer timer = new Timer();
timer.schedule(new TimerTask(){
publci void run(){
close();
timer.cancle();
}
},5000);
}
public void close(){
System.out.println("강아지문 닫힘");
open = false;
}
}